<?php
//Ultima verificacion: 14-10-2014 ; 21-11-2014 ; 05-03-2015
class M_calificacion_evaluacion extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener las evaluaciones y resultados los alumnos.
	function buscarActivos($restriccion=null, $orderBy=null){
		$consulta = $this->db->query("SELECT calificacionxevaluacion.*, evaluacion.nombre AS nombreEvaluacion, evaluacion.notaMinima AS notaMinima, evaluacion.descripcion AS descripcionEvaluacion,
											 persona.nombre AS nombrePersona,
											 (SELECT tipoevaluacion.nombre FROM tipoevaluacion WHERE tipoevaluacion.idTipoEvaluacion=evaluacion.idTipoEvaluacion AND tipoevaluacion.estado<>-1 LIMIT 1) as tipoEvaluacion,
											 DATE_FORMAT(evaluacion.fechaEvaluacion,'%d/%m/%Y') AS fechaEvaluacionFormateada,
											 DATE_FORMAT(evaluacion.fechaResultado,'%d/%m/%Y') AS fechaResultadoFormateada,
											 DATE_FORMAT(evaluacion.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											 DATE_FORMAT(evaluacion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM calificacionxevaluacion, evaluacion, asignatura, division, curso, ciclolectivo, turno, alumnoxdivision, alumno, persona
									  WHERE calificacionxevaluacion.idEvaluacion=evaluacion.idEvaluacion AND
											evaluacion.idAsignatura=asignatura.idAsignatura AND
											asignatura.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											curso.idTurno=turno.idTurno AND 
											calificacionxevaluacion.idAxD=alumnoxdivision.idAxD AND
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND											
											calificacionxevaluacion.estado=1 AND 
											evaluacion.estado=1 AND 
											asignatura.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND											
											ciclolectivo.estado<>-1 AND 
											turno.estado=1 AND
											alumnoxdivision.estado=1 AND
											alumno.estado=1 AND
											persona.estado=1 $restriccion
									  ORDER BY evaluacion.fechaEvaluacion DESC, evaluacion.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza para crear un resultado de una evaluacion a un alumno en particular.
	function crear($idEvaluacion=null, $idAxD=null, $calificacion=null, $descripcion=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `calificacionxevaluacion` (`idCxE`,`idEvaluacion`,`idAxD`,`calificacion`,`descripcion`,`fechaCreacion`,`estado`,`idCreador`) VALUES 
															    (NULL,".$this->db->escape($idEvaluacion).",".$this->db->escape($idAxD).",".$this->db->escape($calificacion).",".$this->db->escape($descripcion).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un resultado de la evaluacion segun su id.
	function get($idCxE=null, $restriccion=null){
		$consulta = $this->db->query("SELECT calificacionxevaluacion.*, persona.apellido, persona.nombre, evaluacion.notaMinima AS notaMinima, asignatura.nombre AS nombreAsignatura, asignatura.idAsignatura,
											 (SELECT tipoevaluacion.nombre FROM tipoevaluacion WHERE tipoevaluacion.idTipoEvaluacion=evaluacion.idTipoEvaluacion AND tipoevaluacion.estado<>-1 LIMIT 1) as tipoEvaluacion,
											 DATE_FORMAT(calificacionxevaluacion.fechaCreacion,'%d/%m/%Y') AS fechaCreacionFormateada
									  FROM calificacionxevaluacion, evaluacion, asignatura, alumnoxdivision, alumno, persona
									  WHERE calificacionxevaluacion.estado<>-1 AND 
											evaluacion.estado<>-1 AND 
											asignatura.estado<>-1 AND 
											alumnoxdivision.estado<>-1 AND 
											alumno.estado<>-1 AND 
											persona.estado<>-1 AND 
											calificacionxevaluacion.idEvaluacion=evaluacion.idEvaluacion AND
											evaluacion.idAsignatura=asignatura.idAsignatura AND
											calificacionxevaluacion.idAxD=alumnoxdivision.idAxD AND
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND
											calificacionxevaluacion.idCxE=".$this->db->escape($idCxE)." $restriccion
									  LIMIT 1");
		return($consulta);
	}
			
	//Este metodo se utiliza cuando queremos devolver un resultado de la evaluacion segun el alumno y la evaluacion seleccionada.
	function get2($idAxD=null, $idEvaluacion=null){
		$consulta = $this->db->query("SELECT calificacionxevaluacion.*
									  FROM calificacionxevaluacion, evaluacion
									  WHERE calificacionxevaluacion.estado<>-1 AND 
											evaluacion.estado<>-1 AND 
											calificacionxevaluacion.idEvaluacion=evaluacion.idEvaluacion AND
											calificacionxevaluacion.idAxD=".$this->db->escape($idAxD)." AND 
											calificacionxevaluacion.idEvaluacion=".$this->db->escape($idEvaluacion)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver la calificacion de evaluacion contigua a una en particular usada generalmente en el formulario de modificar
	function getContiguo($idCxE, $cant=null, $idEvaluacion=null){
		do{
			$idCxE+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM calificacionxevaluacion
										  WHERE idCxE=".$this->db->escape($idCxE)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1' || $consulta->row()->idEvaluacion != $idEvaluacion);
				
		return($consulta->row()->idCxE);
	}
	
	//Este metodo se utiliza para modificar un resultado de una evaluacion
	function modificar($idCxE=null, $calificacion=null, $descripcion=null){
		$consulta = $this->db->query("UPDATE `calificacionxevaluacion`
									 SET `calificacion` = ". $this->db->escape($calificacion) .",
										 `descripcion` = ". $this->db->escape($descripcion) ."
							         WHERE `calificacionxevaluacion`.`idCxE` = " . $this->db->escape($idCxE) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>